package ar.com.gepp.torneo.comparators;

import ar.com.gepp.torneo.entidades.impl.Equipo;
import ar.com.gepp.torneo.entidades.impl.Motor;
import ar.com.gepp.torneo.entidades.impl.Partido;
import ar.com.gepp.torneo.entidades.impl.PuntajePartido;

public class EliminatoriaClasificacionDoble {

	private Partido partidoIda;
	private Partido partidoVuelta;

	public Equipo getGanador() {
		if (partidoIda.getResultado().equals(PuntajePartido.LOCAL)){
			if (partidoVuelta.getResultado().equals(PuntajePartido.EMPATE)){
				return partidoVuelta.getVisitante();
			}
			if (partidoVuelta.getResultado().equals(PuntajePartido.VISITANTE)){
				return partidoVuelta.getVisitante();
			}
			if (partidoVuelta.getResultado().equals(PuntajePartido.LOCAL)){
				return definirSerie();
			}
		}
		if (partidoIda.getResultado().equals(PuntajePartido.VISITANTE)){
			if (partidoVuelta.getResultado().equals(PuntajePartido.EMPATE)){
				return partidoVuelta.getLocal();
			}
			if (partidoVuelta.getResultado().equals(PuntajePartido.LOCAL)){
				return partidoVuelta.getLocal();
			}
			if (partidoVuelta.getResultado().equals(PuntajePartido.VISITANTE)){
				return definirSerie();
			}
		}
		if (partidoIda.getResultado().equals(PuntajePartido.EMPATE)){
			if (partidoVuelta.getResultado().equals(PuntajePartido.EMPATE)){
				return definirSerie();
			}
			if (partidoVuelta.getResultado().equals(PuntajePartido.LOCAL)){
				return partidoVuelta.getLocal();
			}
			if (partidoVuelta.getResultado().equals(PuntajePartido.VISITANTE)){
				return partidoVuelta.getVisitante();
			}
		}
		return null;
	}

	private Equipo definirSerie() {
		Integer golesLocal = 0;
		Integer golesVisitante = 0;
		golesLocal += partidoIda.getGolLocal();
		golesVisitante += partidoIda.getGolVisitante() * 2;
		golesLocal += partidoVuelta.getGolVisitante() * 2;
		golesVisitante += partidoVuelta.getGolLocal();

		if (golesLocal.intValue() > golesVisitante.intValue()) {
			return partidoIda.getLocal();
		} else if (golesLocal.intValue() < golesVisitante.intValue()) {
			return partidoVuelta.getLocal();
		} else {
			Motor motor = new Motor();
			motor.iniciar();
			while (golesLocal.equals(golesVisitante)) {
				golesLocal = motor.getValor(partidoVuelta.getVisitante().getValores());
				golesVisitante = motor.getValor(partidoVuelta.getLocal().getValores());
			}
			if (golesLocal.intValue() < golesVisitante.intValue()) {
				partidoVuelta.setGolLocal(partidoVuelta.getGolLocal() + 1);
			} else {
				partidoVuelta.setGolVisitante(partidoVuelta.getGolVisitante() + 1);
			}
			return partidoVuelta.getGanador();
		}
	}

	public Partido getPartidoIda() {
		return partidoIda;
	}

	public void setPartidoIda(Partido partidoIda) {
		this.partidoIda = partidoIda;
	}

	public Partido getPartidoVuelta() {
		return partidoVuelta;
	}

	public void setPartidoVuelta(Partido partidoVuelta) {
		this.partidoVuelta = partidoVuelta;
	}

}
